package com.ms.qw.client.dto;

import com.ms.qw.enums.ActivoInactivo;
import com.ms.qw.enums.TipoCategoriaReceta;
import com.ms.qw.enums.TipoClaseRacion;
import com.ms.qw.enums.TipoRacion;

import javax.persistence.Column;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class RecetaDTO extends AuditoriaDTO {

    private Integer codigo;

    private Boolean seleccionado;

    private Boolean mostrarRaciones = Boolean.FALSE;

    private String codigoQW;

    private String nombre;

    private String alias;

    private Integer totalRaciones;

    private Integer codigoTipoReceta;


    private Integer codigoCategoriaReceta;


    private Integer codigoClaseReceta;


    private String regionAlimentaria;


    private String estado;

    private Integer orden;

    private List<RecetaDetalleDTO> detalle;

    public RecetaDTO() {
        setEstado(ActivoInactivo.ACTIVO.getCodigo());
        setDetalle(new ArrayList<RecetaDetalleDTO>());
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }


    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public Integer getOrden() {
        return orden;
    }

    public void setOrden(Integer orden) {
        this.orden = orden;
    }

    public List<RecetaDetalleDTO> getDetalle() {
        return detalle;
    }

    public void setDetalle(List<RecetaDetalleDTO> value) {
        this.detalle = value;
        for (RecetaDetalleDTO detalleDTO : detalle) {
            detalleDTO.setReceta(this);
        }
    }

    public void addDetalle(DosificacionDTO dosificacionDTO) {
        if (detalle == null) detalle = new ArrayList<RecetaDetalleDTO>();
        RecetaDetalleDTO item = new RecetaDetalleDTO();
        item.setReceta(this);
        item.setDosificacion(dosificacionDTO);

        detalle.add(item);
    }

    public void cleanPks() {
        setCodigo(null);
        setCodigoQW(null);
        setFechaCreacion(null);
        setCreadoPor(null);
        setRegionAlimentaria(null);
        for (RecetaDetalleDTO recetaDetalleDTO : detalle) {
            recetaDetalleDTO.getReceta().setCodigo(null);
            recetaDetalleDTO.setCodigo(null);
            recetaDetalleDTO.setFechaCreacion(null);
            recetaDetalleDTO.setCreadoPor(null);
        }
    }

    public String getCodigoQW() {
        return codigoQW;
    }

    public void setCodigoQW(String codigoQW) {
        this.codigoQW = codigoQW;
    }


    public Integer getCodigoTipoReceta() {
        return codigoTipoReceta;
    }

    public void setCodigoTipoReceta(Integer codigoTipoReceta) {
        this.codigoTipoReceta = codigoTipoReceta;
    }

    public Integer getCodigoCategoriaReceta() {
        return codigoCategoriaReceta;
    }

    public void setCodigoCategoriaReceta(Integer codigoCategoriaReceta) {
        this.codigoCategoriaReceta = codigoCategoriaReceta;
    }

    public Integer getCodigoClaseReceta() {
        return codigoClaseReceta;
    }

    public void setCodigoClaseReceta(Integer codigoClaseReceta) {
        this.codigoClaseReceta = codigoClaseReceta;
    }

    public String getRegionAlimentaria() {
        return regionAlimentaria;
    }

    public void setRegionAlimentaria(String regionAlimentaria) {
        this.regionAlimentaria = regionAlimentaria;
    }

    public Boolean getSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(Boolean seleccionado) {
        this.seleccionado = seleccionado;
    }

    public Boolean getMostrarRaciones() {
        return mostrarRaciones;
    }

    public void setMostrarRaciones(Boolean mostrarRaciones) {
        this.mostrarRaciones = mostrarRaciones;
    }

    public Integer getTotalRaciones() {
        return totalRaciones;
    }

    public void setTotalRaciones(Integer totalRaciones) {
        this.totalRaciones = totalRaciones;
        if (this.totalRaciones > 0) {
            mostrarRaciones = Boolean.TRUE;
        }
    }

    public List<Integer> getDosicifacionesIds() {
        List<Integer> result = new ArrayList<Integer>();
        for (RecetaDetalleDTO recetaDetalleDTO : detalle) {
            result.add(recetaDetalleDTO.getCodigoDosificacion());
        }
        return  result;
    }
}
